package com.ybkj.daijia.server.mapper;

import com.ybkj.daijia.server.model.Area;
import com.ybkj.daijia.server.model.AreaWeight;
import java.util.List;
import org.apache.ibatis.annotations.Param;

public interface AreaMapper {

    /**
     * 保存地区信息
     *
     * @param record
     * @return
     */
    int insertRecord(Area record);

    /**
     * 批量保存地区信息
     *
     * @param records
     * @return
     */
    int batchInsertRecord(List<Area> records);

    /**
     * 根据主键查询地区信息
     *
     * @param id
     * @return
     */
    Area selectByPrimaryKey(Long id);

    /**
     * 根据地区名称查询地区信息
     *
     * @param name
     * @return
     */
    Area selectByName(String name);

    /**
     * 根据名称模糊查询
     *
     * @param name
     * @param offset
     * @param size
     * @return
     */
    List<Area> selectByNameLike(@Param("name") String name, @Param("offset") Integer offset,
        @Param("size") Integer size);

    /**
     * 根据名称模糊统计查询
     *
     * @param name
     * @return
     */
    long countByNameLike(@Param("name") String name);

    /**
     * 查询所有地区信息
     *
     * @return
     */
    List<Area> selectAll(@Param("name") String name, @Param("companyId") Long companyId);

    /**
     * 根据公司查询所有地区信息价
     *
     * @param name
     * @param companyId
     * @return
     */
    List<Area> selectAllByCompanyId(@Param("name") String name, @Param("companyId") Long companyId);

    /**
     * 根据一组id查询地区信息
     *
     * @param ids
     * @return
     */
    List<Area> selectByIdIn(Long ids[]);

    /**
     * 根据id删除地区信息
     *
     * @param id
     * @return
     */
    int deleteByPrimaryKey(Long id);

    /**
     * 根据主键更新地区信息
     *
     * @param area
     * @return
     */
    int updateByPrimaryKey(Area area);

    /**
     * 根据地区名称查询公司信息
     *
     * @param city
     * @return
     */
    List<Long> selectByNameLikeBegin(String city);

    /**
     * 根据主键查询地区基本信息并且包含收费信息
     *
     * @param areaId
     * @return
     */

    Area selectByPrimaryKeyWithCharge(@Param("areaId") Long areaId);

    /**
     * 根据主键查询地区基本信息并且包含收费信息
     *
     * @param areaId
     * @return
     */
    Area selectDaijiaByPassenger(@Param("id") Long id);

    /**
     * 根据主键查询地区基本信息并且包含收费信息
     *
     * @param areaId
     * @return
     */
    Area selectZhuancheByPassenger(@Param("id") Long id);

    /**
     * 根据主键查询地区基本信息并且包含收费信息
     *
     * @param areaId
     * @return
     */
    Area selectPaotuiByPassenger(@Param("id") Long id);

    Area selectDaijiaByEnterprise(@Param("id") Long id);

    Area selectZhuancheByEnterprise(@Param("id") Long id);

    Area selectPaotuiByEnterprise(@Param("id") Long id);

    void addAreaFeeDaijia(@Param("passengerId") Long passengerId, @Param("areaId") Long areaId);

    void addAreaFeeZhuanche(@Param("passengerId") Long passengerId,
        @Param("areaCarId") Long areaCarId);

    void addAreaFeePaotui(@Param("passengerId") Long passengerId,
        @Param("areaPaotuiId") Long areaPaotuiId);

    void deleteAreaFeeDaijia(@Param("passengerId") Long passengerId);

    void deleteAreaFeeZhuanche(@Param("passengerId") Long passengerId);

    void deleteAreaFeePaotui(@Param("passengerId") Long passengerId);


    void addEnterpriseAreaFeeDaijia(@Param("enterpriseId") Long enterpriseId,
        @Param("areaId") Long areaId);

    void addEnterpriseAreaFeeZhuanche(@Param("enterpriseId") Long enterpriseId,
        @Param("areaCarId") Long areaCarId);

    void addEnterpriseAreaFeePaotui(@Param("enterpriseId") Long enterpriseId,
        @Param("areaPaotuiId") Long areaPaotuiId);

    void deleteEnterpriseAreaFeeDaijia(@Param("enterpriseId") Long enterpriseId);

    void deleteEnterpriseAreaFeeZhuanche(@Param("enterpriseId") Long enterpriseId);

    void deleteEnterpriseAreaFeePaotui(@Param("enterpriseId") Long enterpriseId);

    List<Area> queryByName(@Param("name") String name);

    List<AreaWeight> listAllWeight(@Param("name") String name);

    AreaWeight selectWeightByPrimaryKey(Long id);

    void updateWeightByPrimaryKey(AreaWeight area);

    void insertWeightRecord(AreaWeight area);

    void deleteWeightByPrimaryKey(Long id);


}
